Java的「介面」可以定義不同類別之間一樣的方法行為,例如飛機跟老鷹都有「飛行」行為,但他們不屬於同一類別,此時就能透過「介面」來定義「飛行」行為。
多重繼承:Java只能單一繼承,但介面可以多重繼承。class Bird extends Animal implements Flyable, Singable{...}class Person implements Eater, Sleeper {...}
定義規格:介面亦為一種類別,其所有方法皆為抽象方法,子類別需實作介面所有抽象方法;而介面之間可以再繼承。interface Eater { void eat(); }
空介面:沒有定義任何方法的介面,作為標記作用。其中有名的兩個空介面:
//Clonealbe物件複製,說明該類別物件可已使用clone方法複製
class MyClass implements Cloneable{
...
}
//Serializable物件序列化,說明該類別物件可被轉換為位元組序列化
class MyClass implements Serializable{
...
}
型別轉換:繼承原本是將類別視為is a關係,但介面是轉換成「有共同行為」的關係。
interface Flyable{
  void fly();
}
class Bird implements Flyable{
  public void fly(){
      System.out.println("Brind is flying");
  }
}
public static void main(String[] args){
  Flyable f1 = new Bird();
}
//Bird實作Flyable介面,因此可將Bird實例賦值給Flyable型別變數
降低相依性:某類別實作某介面,只需知道介面方法,降低彼此不同的程式碼相依性。
  //定義Sound介面:發聲方法
  public interface Sound { 
      void makeSound();
  }
  //定義Animal抽象類別,實作Sound介面
  public abstract class Animal implements Sound{ 
      public void makeSound(){
          System.out.println("Animal makes a sound.");
      }
  }
  //建立動物子類別,因父類別實作Sound介面,故都可使用此方法
  public class Dog extends Animal{
  ...
  }
  public class Cat extends Animal{
  ...
  }
  //另創建Zoo,要讓動物類別發出聲音,使用介面
  public class Zoo{
      public void makeNoise(Sound animal){ //Sound介面亦為類別
          animal.makeSound();
      }
  }
  //Main方法使用
  public class Main{
      public static void main(String[] args){
          Zoo zoo = new Zoo();
          Dog dog = new Dog();
          Cat cat = new Cat();
          Zoo.makeNoise(dog); 
          Zoo.makeNoise(cat);
      }
  }
public static final(會省略)public abstract(會省略)